package com.divemotor.ventarepuestosinternet.service.impl;

import java.io.Serializable;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.divemotor.ventarepuestosinternet.dao.SubGrupoDAO;
import com.divemotor.ventarepuestosinternet.exception.DivemotorBusinessException;
import com.divemotor.ventarepuestosinternet.model.Grupo;
import com.divemotor.ventarepuestosinternet.model.SubGrupo;
import com.divemotor.ventarepuestosinternet.model.TipoComponente;
import com.divemotor.ventarepuestosinternet.model.Vehiculo;
import com.divemotor.ventarepuestosinternet.model.VehiculoExtra;
import com.divemotor.ventarepuestosinternet.service.SubGrupoService;
import com.divemotor.ventarepuestosinternet.util.Constantes;
import com.divemotor.ventarepuestosinternet.util.DatosDeSession;
import com.divemotor.ventarepuestosinternet.util.FechasUtil;

@Service (value = "subGrupoService")
@Transactional(rollbackFor=Exception.class)
public class SubGrupoServiceImpl implements SubGrupoService , Serializable{

	private static final long serialVersionUID = 1826778630631239891L;
	
	@Autowired
	private SubGrupoDAO subGrupoDAO;
	
	@Override
	public void insertar(SubGrupo subGrupo) throws DivemotorBusinessException {	
		subGrupo.setFechaCreacion(FechasUtil.obtenerFechaActual());
		subGrupo.setUsuarioCreacion(DatosDeSession.obtenerUsuarioAutenticado());
		subGrupoDAO.insertar(subGrupo);
	}

	@Override
	public void actualizar(SubGrupo subGrupo) throws DivemotorBusinessException {
		subGrupo.setFechaModificacion(FechasUtil.obtenerFechaActual());
		subGrupo.setUsuarioModificacion(DatosDeSession.obtenerUsuarioAutenticado());
		subGrupoDAO.actualizar(subGrupo);
	}

	@Override
	public List<SubGrupo> listar() throws DivemotorBusinessException {
		return subGrupoDAO.listar();	
	}

	@Override
	public void eliminar(SubGrupo subGrupo) throws DivemotorBusinessException {
		subGrupo.setFechaEliminacion(FechasUtil.obtenerFechaActual());
		subGrupo.setUsuarioEliminacion(DatosDeSession.obtenerUsuarioAutenticado());
		subGrupo.setEstado(Constantes.ESTADO_ELIMINADO);
		subGrupoDAO.eliminar(subGrupo);
	}

	@Override
	public List<SubGrupo> buscar(SubGrupo subGrupo) throws DivemotorBusinessException {
		return  subGrupoDAO.buscar(subGrupo);
	}

	@Override
	public SubGrupo obtenerPorNombre(SubGrupo subGrupo)
			throws DivemotorBusinessException {
		return subGrupoDAO.obtenerPorNombre(subGrupo);
	}

	@Override
	public SubGrupo obtenerPorCodigoSAP(SubGrupo subGrupo)
			throws DivemotorBusinessException {
		return subGrupoDAO.obtenerPorCodigoSAP(subGrupo);
	}

	@Override
	public List<SubGrupo> listarPorGrupo(SubGrupo subGrupo) throws DivemotorBusinessException {
		return subGrupoDAO.listarPorGrupo(subGrupo);
	}

	@Override
	public SubGrupo obtenerPorId(SubGrupo subGrupo) throws DivemotorBusinessException {
		return subGrupoDAO.obtenerPorId(subGrupo);
	}

	@Override
	public List<SubGrupo> listarSubGruposPorVehiculoYGrupo(Vehiculo vehiculo, Grupo grupo, TipoComponente tipo) throws DivemotorBusinessException {
		return subGrupoDAO.listarSubGruposPorVehiculoYGrupo(vehiculo, grupo, tipo);
	}

	@Override
	public List<SubGrupo> listarSubGruposPorVehiculoExtraYGrupo(VehiculoExtra vehiculoExtra, Grupo grupo) throws DivemotorBusinessException {
		return subGrupoDAO.listarSubGruposPorVehiculoExtraYGrupo(vehiculoExtra, grupo);
	}

}
